package app.fugema.shop.http;


import com.base.common.model.http.HttpUtils;
import com.base.common.model.http.upLoad.UploadService;
import com.base.common.netBeanPackage.BaseApiResult;

import app.fugema.shop.BuildConfig;
import app.fugema.shop.main.center.model.BalanceDetailResult;
import app.fugema.shop.main.center.model.BalanceResult;
import app.fugema.shop.main.center.model.BrowseGoodsResult;
import app.fugema.shop.main.center.model.CheckMethodResult;
import app.fugema.shop.main.center.model.CollectGoodsResult;
import app.fugema.shop.main.center.model.CollectShopResult;
import app.fugema.shop.main.center.model.CouponListResult;
import app.fugema.shop.main.center.model.GiftOrderBean;
import app.fugema.shop.main.center.model.GiftOrderCountResult;
import app.fugema.shop.main.center.model.GiftOrdersDetailResult;
import app.fugema.shop.main.center.model.GiftOrdersResult;
import app.fugema.shop.main.evaluate.model.AnswerResult;
import app.fugema.shop.main.evaluate.model.EvaluatePageResult;
import app.fugema.shop.main.evaluate.model.QusetionResult;
import app.fugema.shop.main.goods.model.CateGoodsPageBean;
import app.fugema.shop.main.goods.model.CategoryPageBean;
import app.fugema.shop.main.goods.model.GoodsDetailResult;
import app.fugema.shop.main.goods.model.GoodsPageBean;
import app.fugema.shop.main.goods.model.ShopCouponResult;
import app.fugema.shop.main.goods.model.SimilarGoodsResult;
import app.fugema.shop.main.goods.model.SkuPriceResult;
import app.fugema.shop.main.goods.model.VShopCateResult;
import app.fugema.shop.main.goods.model.VShopInfoResult;
import app.fugema.shop.main.goods.model.VShopResult;
import app.fugema.shop.main.home.model.HomeData;
import app.fugema.shop.main.center.model.PointResultBean;
import app.fugema.shop.main.login.model.AlipayAuthResult;
import app.fugema.shop.main.login.model.AlipayUserResult;
import app.fugema.shop.main.login.model.CheckImgResult;
import app.fugema.shop.main.login.model.CheckVerCodeResult;
import app.fugema.shop.main.login.model.MLoginBean;
import app.fugema.shop.main.login.model.MUserInfo;
import app.fugema.shop.main.login.model.RegisterResult;
import app.fugema.shop.main.evaluate.model.CommentListResult;
import app.fugema.shop.main.home.model.NearStoreResult;
import app.fugema.shop.main.online.model.StoreIndexResult;
import app.fugema.shop.main.order.model.AddressDetailResult;
import app.fugema.shop.main.order.model.AddressResult;
import app.fugema.shop.main.order.model.CheckOrderStatusResult;
import app.fugema.shop.main.evaluate.model.CommentProductResult;
import app.fugema.shop.main.order.model.GroupBookingBean;
import app.fugema.shop.main.order.model.GroupDetailResult;
import app.fugema.shop.main.order.model.GroupOrderResult;
import app.fugema.shop.main.order.model.OrderDetailResult;
import app.fugema.shop.main.order.model.OrderExpressResult;
import app.fugema.shop.main.order.model.OrderListResult;
import app.fugema.shop.main.order.model.OrderRefundModelResult;
import app.fugema.shop.main.order.model.PaymentResult;
import app.fugema.shop.main.order.model.PostOrderResult;
import app.fugema.shop.main.order.model.RefundDetailResult;
import app.fugema.shop.main.order.model.RefundProcessDetailResult;
import app.fugema.shop.main.order.model.ShopCartResult;
import app.fugema.shop.main.order.model.RefundOrdersResult;
import app.fugema.shop.main.order.model.ShopModifyCountResult;
import app.fugema.shop.main.order.model.SubmitModelResult;
import app.fugema.shop.main.setting.model.ContactResult;
import app.fugema.shop.main.setting.model.ChatMsgResult;
import app.fugema.shop.main.setting.model.UploadPicResult;
import app.fugema.shop.main.wallet.model.PayInfoResult;

import java.util.Map;

import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

public interface HttpService {

    static HttpService getHttpServer() {
        return HttpUtils.getInstance(BuildConfig.isTest ? BuildConfig.API_TEST : BuildConfig.API_HOST).getHttpServer(HttpService.class);
    }

    //上传图片
    static UploadService getUpLoadFilesService() {
        return UploadService.getUpLoadFilesService(BuildConfig.isTest ? BuildConfig.API_TEST : BuildConfig.API_HOST);
    }
    /***=================================福格玛===================================****/

    /**
     * 关于页面
     * @return
     */
    @GET("api/home/GetAboutUs")
    Observable<BaseApiResult> aboutUs();

    /************用户************/

    /**
     * 用户注册
     * @param userParam
     * @return         Register/PostRegisterUser
     */
    @FormUrlEncoded
    @POST("api/Register/PostRegisterUser")
    Observable<RegisterResult> registerUser(@FieldMap Map<String,Object> userParam);

    /**
     * 账号密码登录
     * 接口地址 api/Login/GetUser
     * 请求方式
     * code 验证码，验证码登录时使用 string
     * mobile  手机号 string
     * password 密码，密码登录时使用   ,@Query("timestamp") String timestamp
     */
    @GET("api/Login/GetUser")
    Observable<MLoginBean> login(@Query("userName") String userName,@Query("password") String pwd);

    /**
     * 第三方 信任登录
     * @param params
     * @return
     */
    @GET("api/Login/GetUser")
    Observable<MLoginBean> appLogin(@QueryMap Map<String,Object> params);

    /**
     * 查看用户信息
     * 接口地址 api/UserCenter/GetUser
     * <p>
     * 请求方式 GET
     * 接口描述 根据用户ID（userId）获取用户信息
     */
    @GET("api/UserCenter/GetUser")
    Observable<MUserInfo> userInfo(@Query("UserKey") String userkey);

    /**
     * 查看用户资金
     * @param userkey
     * @return
     */
    @GET("api/MemberCapital/Get")
    Observable<BalanceResult> userMoney(@Query("userKey") String userkey);

    /**
     * 获取图片验证码
     * @return
     */
    @GET("api/Login/GetImageCheckCode")
    Observable<CheckImgResult> getImgCheckCode();

    /**
     * 发送 绑定手机号短信验证码
     * 接口地址 /api/UserCenter/GetPhoneOrEmailCheckCode
     * <p>
     * 请求方式 GET
     * <p>
     * consumes ["application/json"]
     * string contact手机号码或邮箱 String userkey 用户凭证  Bool checkBind  是否检测绑定状态
     */
    //@FormUrlEncoded
    @GET("api/UserCenter/GetPhoneOrEmailCheckCode")
    Observable<BaseApiResult> getBindTelVerfyCode(@QueryMap  Map<String,Object> phoneParam);

    /**
     * 验证 绑定手机验证码
     * @param phoneParam
     * string contact手机号码或邮箱 String userkey 用户凭证  String checkCode  验证码
     * @return
     */
    @GET("api/UserCenter/GetCheckPhoneOrEmailCheckCode")
    Observable<BaseApiResult> checkBindTelVerfyCode(@QueryMap  Map<String,Object> phoneParam);

    /**
     *   发送验证码 (重置密码)  (发送图片验证码获取手机邮箱验证码)
     * 接口地址 api/login/GetPhoneOrEmailCheckCode
     * <p>
     * 请求方式 GET
     * String id 获取图片验证时返回的唯一id
     * string contact手机号码或邮箱
     * String imageCheckCode图片验证码
     */
    @GET("api/login/GetPhoneOrEmailCheckCode")
    Observable<BaseApiResult> getPwdVerifyCode(@Query("id") String id,@Query("contact") String phone,@Query("imageCheckCode") String checkCode);

    /**
     * 验证  (重置密码) 验证码
     * @param contact 手机号码
     * @param checkCode 验证码
     * @param
     * @return
     */
    @GET("api/login/GetCheckPhoneOrEmailCheckCode")
    Observable<CheckVerCodeResult> checkPwdVerifyCode(@Query("contact") String contact, @Query("checkCode") String checkCode);

    /**
     * 重置用户密码
     * @param cert  凭证
     * @param pwd
     * @return
     */
    @FormUrlEncoded
    @POST("api/Login/PostChangePassword")
    Observable<BaseApiResult> changePwd(@Field("certificate") String cert,@Field("password") String pwd);

    /**
     * 重置用户支付密码
     * @param cert  凭证
     * @param pwd
     * @return
     */
    @FormUrlEncoded
    @POST("api/Login/PostChangePayPwd")
    Observable<BaseApiResult> changePayPwd(@Field("certificate") String cert,@Field("password") String pwd);

    /**
     * 我的积分 积分列表
     * @param userkey
     * @param page
     * @param pageSize
     * @return
     */
    @GET("api/UserCenter/GetIntegralRecord")
    Observable<PointResultBean> getPointRecord(@Query("userkey") String userkey, @Query("page") int page, @Query("pagesize") int pageSize);

    /**
     * 我的优惠券
     * @param
     * @return
     */
    @GET("api/coupon/GetUserCounponList")
    Observable<CouponListResult> getUserCounponList(@Query("userkey") String userkey);

    /**
     *  查询 收藏的店铺  商品
     * @param collectionParam
     * pageno=1&pagesize=10&userkey=Zit
     *
     * @return
     */
    @GET("api/UserCenter/GetUserCollectionShop")
    Observable<CollectShopResult> getCollectionShop(@QueryMap  Map<String,Object> collectionParam);
    @GET("api/UserCenter/GetUserCollectionProduct")
    Observable<CollectGoodsResult> getCollectionProduct(@QueryMap  Map<String,Object> collectionParam);

    /**
     *  取消收藏的 商品
     * @param productId
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/product/PostAddFavoriteProduct")
    Observable<BaseApiResult> cancelCollectProduct(@Field("productId") long productId,@Field("userkey") String userkey);

    /**
     * 取消收藏的 店铺
     * @param shopId
     * @param userkey
     * @return
     */
    @GET("api/UserCenter/GetCancelConcernShop")
    Observable<BaseApiResult> cancelCollectShop(@Query("shopId") long shopId,@Query("userkey") String userkey);

    /**
     * 用户资金明细详情
     * @param pageNo
     * @param pageSize
     * @param userkey
     * @return
     */
    @GET("api/MemberCapital/GetList")
    Observable<BalanceDetailResult> userMoneyDetail(@Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("userkey") String userkey);

    /**
     * 用户余额提现预检测
     * @param userkey
     * @return   检查 是否可以 提现到 微信 支付宝
     */
    @GET("api/MemberCapital/GetCanWithDraw")
    Observable<CheckMethodResult> checkTiXianMethod(@Query("userkey") String userkey);

    /**
     * 申请 提现
     * @param applyParams  applyType 提现方式(1微信 3支付宝)
     * amount
     * pwd
     * openid  收款账号(支付宝 必填)  微信提现时不填
     * nickname   收款账号真实姓名(支付宝 必填)  微信提现时不填
     * userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/MemberCapital/PostApplyWithDraw")
    Observable<BaseApiResult> appleyDarwMoney(@FieldMap Map<String,Object> applyParams );

    /**
     * 账户余额充值
     * @param typeid  支付插件标识
     * @param amount
     * @param userkey      @Query("ispresent") boolean ispresent,  是否充值赠送 (不确定是否需要该参数)
     * @return
     */
    @FormUrlEncoded
    @POST("api/Payment/Charge")
    Observable<PayInfoResult> chargeMoney(@Field("typeid") String typeid, @Field("amount") double amount,@Field("userkey") String userkey);

    /**
     * 修改个人信息
     * @param photo   头像（base64数据） realName 真实姓名  int sex  性别（1：男，2：女）Datetime birthDay 生日(具体到天) QQ QQ号码 nick 昵称
     * @param realName  api/UserCenter/SaveUserInfo
     * @param sex
     * @param birthDay
     * @param QQ
     * @param nick
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/UserCenter/SaveUserInfo2")
    Observable<BaseApiResult> saveUserInfo(@Field("photo") String photo,@Field("realName") String realName, @Field("sex") int sex
            ,@Field("birthDay") String birthDay,@Field("QQ") String QQ,@Field("nick") String nick,@Field("userkey") String userkey);

    /**
     *  个人中心 修改登录密码
     * @param oldPwd
     * @param pwd
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/UserCenter/PostChangePassword")
    Observable<BaseApiResult> centerPostChangePwd(@Field("oldpassword") String oldPwd,@Field("password") String pwd,@Field("userkey") String userkey);
    /**
     *  个人中心 修改支付密码
     * @param oldPwd
     * @param pwd
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/UserCenter/PostChangePayPwd")
    Observable<BaseApiResult> centerPostChangePayPwd(@Field("oldpassword") String oldPwd,@Field("password") String pwd,@Field("userkey") String userkey);


    @GET("api/UserCenter/GetUserContact")
    Observable<ContactResult> getUserBindPhone(@Query("userkey") String userkey);

    /************地址************/
    /**
     * 用户地址列表
     * 接口地址
     * 请求方式 GET
     * 接口描述 获取用户的所有地址信息
     */
    @GET("api/ShippingAddress/GetShippingAddressList")
    Observable<AddressResult> getUserAddressList(@Query("userkey") String userkey );

    /**
     * 查询地址详情
     * @param id
     * @param userkey
     * @return
     */
    @GET("api/ShippingAddress/GetShippingAddress")
    Observable<AddressDetailResult> getAddressDetailById(@Query("id") int id, @Query("userkey") String userkey );


    /**
     * 新增用户地址
     * 接口地址
     * <p>
     * 请求方式 POST
     * 接口描述 新增用户地址
     */
    @FormUrlEncoded
    @POST("api/ShippingAddress/PostAddShippingAddress")
    Observable<BaseApiResult> addAddress(@FieldMap Map<String,Object> adressParams);

    /**
     * 设置默认地址
     * @param addrId
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/ShippingAddress/PostSetDefaultAddress")
    Observable<BaseApiResult> setDefaultAddr(@Field("addId") int addrId,@Field("userkey") String userkey);

    /**
     * 删除 地址
     * @param id
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/ShippingAddress/PostDeleteShippingAddress")
    Observable<BaseApiResult> deleteAddrById(@Field("id") int id,@Field("userkey") String userkey);

    /**
     * 编辑 用户地址
     * @param adressParams
     * @return
     */
    @FormUrlEncoded
    @POST("api/ShippingAddress/PostEditShippingAddress")
    Observable<BaseApiResult> editAddress(@FieldMap Map<String,Object> adressParams);

    /***=================================福格玛===================================****/


    /************商品************/

    /**
     * 新品推荐
     * 接口地址 /api/home/Get
     * <p>
     * 请求方式 GET
     * <p>
     * pageno   size
     * 接口描述 首页商品列表
     */
    @GET("api/home/Get")
    Observable<GoodsPageBean> getHomeGoodsByPage(@Query("pageno") int pageno, @Query("pagesize") int size);

    /**
     * 获取 首页
     * 接口地址 /AppHome/data/default.json
     * <p>
     * 请求方式 GET
     * <p>
     * 接口描述   首页消息
     *
     * 渠道:
     *
     */
    @GET("AppHome/data/default.json")
    Observable<HomeData> getHomeData();

    /**
     * 分类信息列表
     * 接口地址 api/Category/GetCategories
     * <p>
     * 请求方式 GET
     *
     * 接口描述 获取所有的产品分类信息，
     */
    @GET("api/Category/GetCategories")
    Observable<CategoryPageBean> categoryInfo();

    /**
     * 通过分类id商品列表信息
     * 接口地址 api/search/GetSearchProducts
     * 请求方式 GET
     * 接口描述 根据分类ID获取该分类下所有的商品列表信息   pageno=1&pagesize=10&cid=1938
     */
    @GET("api/search/GetSearchProducts")
    Observable<CateGoodsPageBean> getGoodsByCateId(@Query("cid") int categoryId, @Query("pageno") int pageno, @Query("pagesize") int size);

    /**
     * 商品列表信息
     * @param params  pageno=1&pagesize=10&cid=181&orderkey=3&ordertype=2&userkey=Zitr
     * @return
     */
    @GET("api/search/GetSearchProducts")
    Observable<CateGoodsPageBean> getGoodsByParam(@QueryMap Map<String,Object> params);

    /**
     * 浏览商品足迹
     *  , @Query("pageno") int pageno, @Query("pagesize") int size
     * @param userkey
     * @return
     */
    @GET("api/product/GetHistoryVisite")
    Observable<BrowseGoodsResult> getHistoryVisite(@Query("userkey") String userkey);

    /**
     * 商品详情信息
     * 接口地址
     * 请求方式 GET
     * 接口描述 根据商品ID 获取商品信息
     * Id 商品ID
     */
    @GET("api/product/GetProductDetail")
    Observable<GoodsDetailResult> getProductDetail(@QueryMap Map<String,Object> IDParams );

    /**
     * 返回商品第一条评论
     * 接口地址 api/product/GetProductCommentShow/238
     * <p>
     * 请求方式 GET
     */
    @GET("api/product/GetProductCommentShow/{id}")
    Observable<EvaluatePageResult> getGoodsEvaluateById(@Path("id") long productId);

    /**
     *
     * @param filerParam  cid=181&b_id=0&userkey=Zitr  keyword=sda&cid=0&b_id=0
     * @return
     */
    @GET("api/search/GetSearchFilter")
    Observable<CateGoodsPageBean> searchProductFilter(@QueryMap Map<String,Object> filerParam);

    /**
     *  查询商品 各规格 价格
     * @param params  ("productId") int productId,@Query("userkey") String userkey
     * @return
     */
    @GET("api/product/GetSKUInfo")
    Observable<SkuPriceResult> getSkuInfo(@QueryMap Map<String,Object> params);

    @GET("api/product/GetIsSelfDelivery")
    Observable<BaseApiResult> isSelfDelivery(@Query("shopId") int shopId,@Query("productId") int productId,@Query("fromLatLng") String latlng,@Query("userkey") String userkey);

    @GET("api/product/GetStroreInfo")
    Observable<BaseApiResult> getStoreInfo(@Query("shopId") int shopId,@Query("productId") int productId,@Query("fromLatLng") String latlng);


    /**
     *  查看相似商品
     * @param productId  ,
     * @return
     */
    @GET("api/Product/GetBoughtProductById")
    Observable<SimilarGoodsResult> getSimilarProduct(@Query("id") int productId, @Query("pageIndex") int pageIndex, @Query("pageSize") int pageSize);

    /************订单************/
    /**
     * 接口地址 api/ MemberOrder/ GetOrders
     * <p>
     * 请求方式 GET
     * <p>
     * 接口描述 根据订单状态获取订单列表信息   //orderstatus=1&pageno=1&pagesize=10&userkey
     * pageno 当前页，默认1 nteger
     * pagesize  每页大小，默认10 integer
     * orderstatus 订单状态  1:待付款 2:待发货 3:待收货 4:待评价 5:成功 6:失败
     * userkey
     */
    @GET("api/MemberOrder/GetOrders")
    Observable<OrderListResult> getMyOrders(@Query("orderstatus") int status, @Query("pageno") int pageNo, @Query("pagesize") int size, @Query("userkey") String userkey);


    /**
     * 订单详情信息
     * 接口地址 api/MemberOrder/GetOrderDetail
     * 请求方式 GET
     * id 订单号
     * userkey
     * 接口描述 根据订单号获取订单详情信息
     */
    @GET("api/MemberOrder/GetOrderDetail")
    Observable<OrderDetailResult> getOrderDetail(@Query("id") long id, @Query("userkey") String userkey);


    /**
     * 新增或取消商品收藏
     * @param productId
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/product/PostAddFavoriteProduct")
    Observable<BaseApiResult> addFavoriteProduct(@Field("productId") int productId, @Field("userkey") String userkey);

    /**
     * 关闭订单
     * @param orderId
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/MemberOrder/PostCloseOrder")
    Observable<BaseApiResult> closeOrder(@Field("orderId") long orderId, @Field("userkey") String userkey);

    /**
     * 确认收货订单
     * @param orderId
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/MemberOrder/PostConfirmOrder")
    Observable<BaseApiResult> confirmOrder(@Field("orderId") long orderId, @Field("userkey") String userkey);

    /**
     *  查询订单物流信息
     * @param orderId
     * @param userkey
     * @return
     */
    @GET("api/MemberOrder/GetExpressInfo")
    Observable<OrderExpressResult> getExpressInfo(@Query("orderId") long orderId, @Query("userkey") String userkey);

    /************支付************/
    /**
     * 支付方式列表  (订单支付前 获取)
     * @param userkey
     * @return
     */
    @GET("api/payment/GetEnablePaymentList")
    Observable<PaymentResult> enablePaymentList(@Query("userkey") String userkey);

    /**
     * 查询 系统消息
     * @param userkey
     * @return
     */
    @GET("api/home/GetChats")
    Observable<ChatMsgResult> getChats(@Query("userkey") String userkey);

    /**
     * 立即购买提交订单
     * @param
     * @return  @FieldMap Map<String,Object> map  @Body OrderShops orderShops
     */
    @FormUrlEncoded
    @POST("api/Order/PostSubmitOrder")
    Observable<PostOrderResult> buyNowSubmitOrder(@FieldMap Map<String,Object> map);

    /**
     * 购物车提交订单
     * @param map
     * @return
     */
    @FormUrlEncoded
    @POST("api/Order/PostSubmitOrderByCart")
    Observable<PostOrderResult> cartSubmitOrder(@FieldMap Map<String, Object> map);

    /**
     *  根据订单、支付方式获取 支付信息
     * @param orderIds  订单id  （多个用 ， 隔开）
     * @param typeid
     * @param userkey
     * @return
     */
    @GET("api/payment/GetPaymentList")
    Observable<PayInfoResult> getPaymentListByOrder(@Query("orderIds") String orderIds, @Query("typeid") String typeid, @Query("userkey") String userkey);

    /**
     *  调整订单金额为0的订单为已付款状态   余额支付完 需要调 改接口 把 订单 状态修改为已付款状态
     * @param orderIds
     * @param userkey
     * @return
     */
    @GET("api/Order/GetPayOrderByIntegral")
    Observable<BaseApiResult> getPayOrderByIntegral(@Query("orderIds") String orderIds, @Query("userkey") String userkey);

    /**
     *  轮训 检查 订单状态
     * @param orderIds
     * @param userkey
     * @return
     */
    @GET("api/MemberOrder/GetOrerStatus")
    Observable<CheckOrderStatusResult> getOrderStatus(@Query("orderIds") String orderIds, @Query("userkey") String userkey);


    /**
     *  新增 发票抬头
     * @param params
     * @return
     */
    @FormUrlEncoded
    @POST("api/Order/PostSaveInvoiceTitleNew")
    Observable<BaseApiResult> saveInvoiceTitle(@FieldMap Map<String,Object> params);

    /**
     * 删除 发票抬头
     * @param id
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/Order/PostDeleteInvoiceTitle")
    Observable<BaseApiResult> deleteInvoiceTitle(@Field("id") long id,@Field("userkey") String userkey);


    /************微店************/
    /**
     * 根据ID查询 店铺信息
     * @param shopId  微店ID
     * @return
     */
    @GET("api/VShop/GetVShop/{id}")
    Observable<VShopResult> getShopById(@Path("id") long shopId);

    /**
     * 微店 所有分类
     * @param shopId
     * @return
     */
    @GET("api/VShop/GetVShopCategory/{id}")
    Observable<VShopCateResult> getShopCategoryById(@Path("id") long shopId);

    /**
     * 获取V店 简介
     * @param shopId
     * @return
     */
    @GET("api/VShop/GetVShopIntroduce/{id}")
    Observable<VShopInfoResult> getVShopIntroduce(@Path("id") long shopId);

    /**
     * 查询 店铺优惠券列表
     * @param shopParams
     * @return
     */
    @GET("api/coupon/GetShopCouponList")
    Observable<ShopCouponResult> getShopCouponListByShopId(@QueryMap Map<String,Object> shopParams );

    /**
     * 领取优惠券
     * @param shopId
     * @param couponId
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/coupon/PostAcceptCoupon")
    Observable<BaseApiResult> applyCoupon(@Field("vshopId") String shopId,@Field("couponId") String couponId,@Field("userkey") String userkey);

    /**
     * 添加或取消 店铺关注
     * @param shopId
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/VShop/PostAddFavoriteShop")
    Observable<BaseApiResult> addFavaoriteShop(@Field("shopId") int shopId,@Field("userkey") String userkey);

    /************积分订单************/

    /**
     *  查询积分兑换 订单 数量
     * @param userkey
     * @return
     */
    @GET("api/gifts/GetOrderCount")
    Observable<GiftOrderCountResult> getGiftOrderCount(@Query("userkey") String userkey);

    /**
     * 查询 积分兑换 订单列表
     * @param giftParam  status 0\1\2\3\4\5    page  userkey
     * @return
     */
    @GET("api/gifts/GetMyOrderList")
    Observable<GiftOrdersResult> getGiftOrderList(@QueryMap  Map<String,Object> giftParam);

    /**
     *  查询积分订单详情
     * @param id
     * @param userkey
     * @return
     */
    @GET("api/gifts/GetOrder")
    Observable<GiftOrdersDetailResult> getGiftOrderDetail(@Query("id") long id, @Query("userkey") String userkey);

    /**
     *  确认 积分订单
     * @param orderId
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/gifts/ConfirmOrderOver")
    Observable<BaseApiResult> confirmGiftOrder(@Field("orderId") long orderId, @Field("userkey") String userkey);

    /**
     *  查询 积分订单 物流信息
     * @param orderId
     * @param userkey
     * @return
     */
    @GET("api/gifts/GetExpressInfo")
    Observable<OrderExpressResult> getGiftExpressInfo(@Query("orderId") long orderId, @Query("userkey") String userkey);

    /************购物车************/
    /**
     *  查询购物车 商品
     * @param includeSB  不传值时默认值为0,如需包含周边门店则传值1
     * @param userkey
     * @return
     */
    @GET("api/Cart/GetCartProduct")
    Observable<ShopCartResult> getCartProduct(@Query("includeSB") int includeSB , @Query("userkey") String userkey );


    /**
     * 删除用户购物车物品
     * @param skuIds   逗号分隔的商品规格ID
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/Cart/PostDeleteCartProduct")
    Observable<BaseApiResult> deleteCartBySkuId(@Field("skuIds") String skuIds,@Field("userkey") String userkey);


    /**
     * 添加用户购物车物品
     * @param skuId
     * @param count
     * @param userkey
     * @return
     */
    //@FormUrlEncoded
    //@POST("api/Cart/PostAddProductToCart")
    //Observable<BaseApiResult> addGoodsToCart(@Field("skuId") String skuId,@Field("count") int count,@Field("userkey") String userkey);

    // 这里把请求换成 Get   skuId 值为拼成的   商品信息里面的   ProductId_color的skuid_size的skuid_version的skuid  没有值的 就用0替换    例子:232_90_0_101
    @GET("api/Cart/GetAddProductToCart")
    Observable<BaseApiResult> addGoodsToCart(@Query("skuId") String skuId,@Query("count") int count,@Query("userkey") String userkey);

    /**
     * 修改 购物车 数量
     * @param jsonstr 里面是skuId和数量的素组  Jsonstr={"skus":[{"skuId":"232_90_0_101","count":"1"}],"userkey":"RnlhdTc0bC9LL2ZqN28zc2FsOFMvQT09"}
     * @param userkey       {skus:[{skuId:"248_8_13_0",count:3}]}
     * @return
     */
    @FormUrlEncoded
    @POST("api/Cart/PostUpdateCartItem")
    Observable<ShopModifyCountResult> updateCart(@Field("jsonstr") String jsonstr, @Field("userkey") String userkey);

    /***=================================福格玛===================================****/

    /************门店************/
    /**
     * 查询 同城附近的 店铺 列表
     * @param params  pageNo=1&pageSize=5& fromLatLng=32.042575,112.142955 &userkey=ZitrKzZY
     * @return
     */
    @GET("api/ShopBranchWeb/GetStoreList")
    Observable<NearStoreResult> getNearStoreList(@QueryMap Map<String,Object> params);


    /**
     *  多门店首页 广告
     * @return
     */
    @GET("api/ShopBranchWeb/GetIndexData")
    Observable<StoreIndexResult> getStorePageIndexData();


    /**
     *  检查app 版本 更新
     * @param appversion
     * @param type  IOS: 3, Android:2
     * @return { success = false, code = 10006,msg = "版本号不能为空或者平台类型错误" }
     * { success = false, code = 10005,msg = "错误的版本号" }
     * { success = false, code = 10004,msg = "站点未设置IOS下载地址" }
     * { success = false, code = 10003, msg = "站点未设置Andriod下载地址" }
     * { success = false, code = 10002, msg = "站点未上传app安装包" }
     * { success = false, code = 10001, msg = "当前为最新版本" }
     * { success = true, code = 10000, data={ DownLoadUrl = downLoadUrl,Description="描述" }}
     */
    @GET("api/home/GetUpdateApp")
    Observable<BaseApiResult> updateApp(@Query("appversion") String appversion,@Query("type") int type);

    /************余额支付************/

    /**
     * 判断预付款金额是否足够支付订单
     * @param ids  订单编号20170101464,1564798          , 隔开
     * @return
     */
    @GET("api/Payment/GetPayByCapitalIsOk")
    Observable<BaseApiResult> isCanPayOrdersByMoney(@Query("ids") String ids);

    /**
     * 预付款支付
     * @param ids
     * @param payPwd  支付密码
     * @return
     */
    @GET("api/Payment/getPayByCapital")
    Observable<BaseApiResult> payOrderByMoney(@Query("ids") String ids,@Query("payPwd") String payPwd);

    /**
     * 是否设置支付密码
     * @param userkey
     * @return
     */
    @GET("api/Payment/GetPayPwd")
    Observable<SuccessResult> isSetPayPwd(@Query("userkey") String userkey);

    /**
     * 设置当前用户支付密码
     */
    @FormUrlEncoded
    @POST("api/payment/PostSetPayPwd")
    Observable<BaseApiResult> setPayPwd(@Field("password") String password,@Field("userkey") String userkey);

    /**
     * 验证用户支付密码
     * @param pwd
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/payment/VerificationPayPwd")
    Observable<SuccessResult> verificPayPwd(@Field("pwd") String pwd,@Field("userkey") String userkey);

    /************评论************/
     //上传图片

    /**
     *
     * @param picStr 图片 的 base64 字符
     * @return
     */
    @FormUrlEncoded
    @POST("api/PublicOperation/UploadPic")
    Observable<UploadPicResult> upLoadPIc(@Field("picStr") String picStr);

    /**
     *  查询订单待评论的商品信息
     * @param orderid
     * @param userkey
     * @return
     */
    @GET("api/Comment/GetComment")
    Observable<CommentProductResult> getCommentByOrderId(@Query("orderid") Long orderid, @Query("userkey") String userkey);

    /**
     *  提交评论
     * @param jsonstr
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/Comment/PostAddComment")
    Observable<BaseApiResult> addComment(@Field("jsonstr") String jsonstr,@Field("userkey") String userkey);

    /**
     *  获取 “追加评论”前的数据
     * @param orderid
     * @param userkey
     * @return
     */
    @GET("api/Comment/GetAppendComment")
    Observable<BaseApiResult> getAppendComment(@Query("orderid") Long orderid,@Query("userkey") String userkey);

    /**
     *  根据商品 查询评论
     * @param pId pId 商品ID
     * @param pageNo  pageNo 页码
     * @param pageSize  pageSize 每页显示数目 默认为10
     * @param commentType  评论类型： 0：所有 默认 1：好评 2：中评 3：差评 4：有图 5：追加
     * @return
     */
    @GET("api/Product/GetProductComment")
    Observable<CommentListResult> getCommentByProductId(@Query("pId") int pId, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("commentType") int commentType);

    /************售后、退款************/

    /**
     *  提交 申请售后/退款
     * @param map
     * @return
     */
    @FormUrlEncoded
    @POST("api/OrderRefund/PostRefundApply")
    Observable<BaseApiResult> applyOrderRefund(@FieldMap Map<String, Object> map);

    /**
     * 获取 申请售后/退款（此时未生成单） 详情
     * @param
     * @return                Long? orderId 订单号
     */
    @GET("api/OrderRefund/GetOrderRefundModel")
    Observable<OrderRefundModelResult> getOrderRefundModel(@QueryMap Map<String,Object> params );

    /**
     * 买家寄货 Long Id
     * @param id  订单号
     * @param expressCompanyName  物流公司名称
     * @param shipOrderNumber  物流公司单号
     * @param userkey
     * @return
     */
    @FormUrlEncoded
    @POST("api/OrderRefund/PostSellerSendGoods")
    Observable<RefundOrdersResult> sellerGoodsSendInfo(@Field("id") long id, @Field("expressCompanyName") String expressCompanyName, @Field("shipOrderNumber") String shipOrderNumber, @Field("userkey") String userkey);

    /**
     * 分页获取 申请售后/退款 列表
     * @param pageno
     * @param pagesize
     * @param userkey
     * @return
     */
    @GET("api/OrderRefund/GetRefundList")
    Observable<RefundOrdersResult> getRefundOrderList(@Query("pageno") int pageno, @Query("pagesize") int pagesize, @Query("userkey") String userkey);

    /**
     *  获取退款单详情
     * @param id  退款单的 id
     * @param userkey
     * @return
     */
    @GET("api/OrderRefund/GetRefundDetail")
    Observable<RefundDetailResult> getRefundOrderDetail(@Query("id") int id, @Query("userkey") String userkey);

    /**
     * 退款单操作流程详情
     * @param id
     * @param userkey
     * @return
     */
    @GET("api/OrderRefund/GetRefundProcessDetail")
    Observable<RefundProcessDetailResult> refundProcessDetail(@Query("id") int id, @Query("userkey") String userkey);

    /************拼团订单相关************/
    /**
     * 我的拼团订单
     * 接口地址
     * <p>
     * 请求方式 GET
     * 默认 pageSiez 5 个数据
     */
    @GET("api/FightGroup/GetFightGroupOrderByUser")
    Observable<GroupOrderResult> getGroupOrder(@Query("page") int pageno, @Query("userkey") String userkey);

    /**
     * 拼团单活动详情
     * 接口地址
     *
     * 请求方式 POST
     */
    @GET("api/FightGroup/GetFightGroupOrderDetail")
    Observable<GroupDetailResult> groupOrderDetail(@Query("id") long orderId, @Query("userkey") String userkey);

    /************未知接口，文档中无记录************/
    @GET("api/UserCenter/GetIsConBindSms")
    Observable<BaseApiResult> isConBindSms(@Query("userkey") String userkey );

    //@FormUrlEncoded          @Query("shippingAddressId") int addressId
    // 立即购买 获取预支付订单信息
    @GET("api/Order/GetSubmitModel")
    Observable<SubmitModelResult> getSubmitModel(@QueryMap Map<String,Object> params);

    /** 购物车 获取预支付订单信息
     * @param  params
     * @return cartItemIds购物车ID  shippingAddressId   收货地址ID（非必填）   string couponIds; 逗号隔开 String userkey
     */
    @GET("api/Order/GetSubmitByCartModel")
    Observable<SubmitModelResult> getCartSubmitModel(@QueryMap Map<String,Object> params);

     // 获取 app 引导页
    //api/Home/GetAppGuidePages

    //api/Gifts/GetSlideAds
    //api/Gifts/GetList?page=1&pagesize=4
    //api/gifts/GetIntegralMallAd
    //api/Register/GetGifts
    //api/Topic/GetTopicList?pageno=1&pagesize=10
    //special/1/data/default.json?
    //api/product/GetProductNewMinSalePrice?pidstrs=7360%2C7359%2C7358%2C7357%2C&userkey=ZitrKz
    //api/Coupon/GetCouponInfo?userkey=ZitrKzZ

    /**
     *  新添加的 问大家 接口
     * @param params
     * @return
     */
    @GET("api/Questions/GetQuestionsByProductId")
    Observable<QusetionResult> getQuestion(@QueryMap  Map<String,Object> params);

    /**
     *  新添加的  问大家 接口 个人中心 我的问答
      * @param params
     * @return
     */
    @GET("api/Questions/GetQuestionsByUserId ")
    Observable<QusetionResult> getQuestionByUser(@QueryMap  Map<String,Object> params);

    /**
     *  问大家 详情
     * @param id
     * @return
     */
    @GET("api/Questions/GetAnswerByQuestionsId")
    Observable<AnswerResult> getQuestionDetail(@Query("id") int id);

    /**
     *  添加提问
     * @param productId
     * @param userId
     * @param title
     * @return
     */
    @FormUrlEncoded
    @POST("api/Questions/AddQuestions")
    Observable<BaseApiResult> postQuestion(@Field("productId") int productId,@Field("userId") int userId,@Field("title") String title);

    /**
     *  添加回答
      * @param questionsId
     * @param userId
     * @param acontent
     * @return
     */
    @FormUrlEncoded
    @POST("api/Questions/AddAnswer")
    Observable<BaseApiResult> postAnswer(@Field("questionsId") int questionsId,@Field("userId") int userId,@Field("acontent") String acontent);

    /**
     *  添加 绑定 userID 友盟推送用的  deviceToken
     * @param userId
     * @param deviceTokens
     * @return
     */
    @FormUrlEncoded
    @POST("api/YouMeng/AddYouMeng")
    Observable<BaseApiResult> uMengAddDeviceToken(@Field("userId") int userId, @Field("deviceTokens") String deviceTokens);


    /**
     *  支付宝登录
     * @return
     */
    @GET("api/Alipay/GetAlipayUser3")
    Observable<AlipayAuthResult> getAlipayUser();

    @GET("api/Alipay/GetAlipayUser")   //,@Field("Signvalue") String signvalue
    Observable<AlipayUserResult> getAlipayUserByAuth(@Query("Auth_code") String authCode );

    /***=================================福格玛===================================****/



    /**
     * 查询拼团商品
     * 接口地址 /prod/pageGroupOnProd
     * <p>
     * 请求方式 GET
     */
    @GET("prod/pageGroupOnProd")
    Observable<GroupBookingBean> pageGroupOnProd(@Query("current") int current, @Query("size") int size);


}
